"""
文本处理模块 - 提供文本预处理、关键词提取、分类等功能
"""
import re
from typing import List, Dict, Tuple
from collections import Counter
import jieba
import jieba.analyse

class TextProcessor:
    """文本处理器类"""
    
    def __init__(self):
        """初始化文本处理器"""
        # 加载停用词
        self.stop_words = self._load_stop_words()
        
    def _load_stop_words(self) -> set:
        """加载停用词表"""
        # 基础停用词
        stop_words = {
            '的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这'
        }
        return stop_words
    
    def preprocess_text(self, text: str) -> str:
        """
        文本预处理
        
        Args:
            text: 原始文本
            
        Returns:
            预处理后的文本
        """
        if not text:
            return ""
        
        # 移除特殊字符和多余空格
        text = re.sub(r'[^\w\s]', '', text)
        text = re.sub(r'\s+', ' ', text).strip()
        
        return text
    
    def extract_keywords(self, text: str, topK: int = 10) -> List[str]:
        """
        提取关键词
        
        Args:
            text: 文本内容
            topK: 返回关键词数量
            
        Returns:
            关键词列表
        """
        if not text:
            return []
        
        # 使用jieba进行关键词提取
        keywords = jieba.analyse.extract_tags(text, topK=topK)
        
        # 过滤停用词
        filtered_keywords = [kw for kw in keywords if kw not in self.stop_words]
        
        return filtered_keywords
    
    def segment_text(self, text: str) -> List[str]:
        """
        中文分词
        
        Args:
            text: 文本内容
            
        Returns:
            分词结果列表
        """
        if not text:
            return []
        
        # 使用jieba进行分词
        words = jieba.lcut(text)
        
        # 过滤停用词和空字符串
        filtered_words = [word for word in words if word.strip() and word not in self.stop_words]
        
        return filtered_words
    
    def get_word_frequency(self, text: str) -> Dict[str, int]:
        """
        获取词频统计
        
        Args:
            text: 文本内容
            
        Returns:
            词频字典
        """
        words = self.segment_text(text)
        return dict(Counter(words))

# 创建全局实例
text_processor = TextProcessor()